"""
日志配置
"""

from loguru import logger as log
from loguru._defaults import LOGURU_FORMAT  # noqa: ignore[protected member]

from config import settings

LOG_SEP: str = "|||"
""" 日志分隔符（这条日志和下一条日志分割） """

LOG_ELEMENT_SEP: str = " | "
""" 日志元素分隔符 """

LOG_FORMAT_FULL: str = LOG_ELEMENT_SEP.join(
    (
        f"{LOG_SEP}{{time:YYYY-MM-DD HH:mm:ss.SSS}}",  # 时间
        "{level}",  # 日志等级
        "{process}",  # 进程 ID
        "{thread}",  # 线程 ID
        "{name}",  # 模块名（api.admin.request_log_api）
        "{file}",  # 文件名（request_log_api.py）
        "{line}",  # 代码行号
        "{extra[trace_id]}",  # 额外的信息（链路 ID）
        "{message}",  # 日志信息
    )
)
""" 日志格式（完整版） """

LOG_FORMAT_SIMPLE: str = "{time:YYYY-MM-DD HH:mm:ss.SSS} {level} {file}:{line} {message}"
""" 日志格式（简易版） """

LOG_FILE_PATH: str = str(settings.PATH.LOG_DIR) + "/{time:YYYY-MM-DD}.log"
""" 日志文件路径 """

LOG_LEVEL: str = "DEBUG"
""" 默认日志等级 """

log.remove()  # 清除默认配置
log.add(LOG_FILE_PATH, rotation="1 day", level=LOG_LEVEL, format=LOG_FORMAT_FULL)  # 输出到日志文件
log.add(lambda msg: print(msg, end=""), format=LOGURU_FORMAT, colorize=True)  # 输出到控制台


class TraceIDFilter:
    """ 链路 ID 过滤器 """

    def __call__(self, record):
        from components.global_param import get_ctx

        record["extra"]["trace_id"] = get_ctx().trace_id

        return True


log = log.patch(TraceIDFilter())  # noqa
